A storage server is a special-purpose processing system used to store and retrieve data on behalf of one or more client processing systems (“clients”). A file server is an example of a storage server. A file server operates on behalf of one or more clients to store and manage shared files in a set of mass storage devices, such as magnetic or optical storage based disks or tapes. The mass storage devices may be organized into one or more groups of Redundant Array of Inexpensive Disks (RAID). In a storage area network (SAN), a storage server can provide clients with block-level access to stored data, rather than file-level access. Some storage servers are capable of providing clients with both file-level access and block-level access, such as certain Filers produced by Network Appliance, Inc. of Sunnyvale, Calif.
In the operation of a storage server, including a file server, processes may include the generation of certain kinds of data storage images. Image generation may include mirroring, in which a mirror copy of certain data at one location is maintained at another location, snapshots of data storage, or clones of data storage volumes. Mirroring of data may be done for various different purposes. Mirroring provides one mechanism for ensuring data availability and minimizing down time, and may be used to provide disaster recovery. Providing a mirrored source in a geographically remote location allows continued data availability even in situations of widespread disasters or so-called “acts of God”. In addition, snapshots provide point-in-time images of data, and clones generally provide a writeable image of data storage, which may be used for various purposes in data operations.
However, operations regarding data storage images can negatively affect system performance. In many operations, active data that is stored in memory may not be retained, and thus the data must be again read from memory. For example, a storage server containing mirrored data storage may include data buffers for data that has been read from the disk storage of the storage server into memory. The data buffers assist system performance because access from memory is generally significantly faster than reading such data from disk storage. When there is an update of the mirrored data storage, which may be referred to as a jumpahead point, the data held in main memory (i.e., random access memory (RAM) or other similar memory) may be lost. The update may be in response to, for example, a write to the mirrored data or a user initiated update. In at least one type of existing system, the memory of the storage server would be flushed. Upon reactivation of a destination volume after a mirroring update, such as in the remounting of the destination volume, any previously requested data that did exist in memory will need to be obtained from disk storage, because any previous data buffers would have been flushed from memory. The flushing of the memory removes previously read in-memory data and assists in avoiding corruption of data. However, active data, which is data that has recently been accessed by one or more clients, that has been read from disk into memory prior to the mirror update is also flushed out of memory and, if a client again requests this data after the mirror update, then the data needs to be read again from disk memory. Because disk storage is slower than access from memory, the result is delays in responses to data requests, which may lead to cascading of delays as operation queues increase in length. The delays will occur until the destination volume has recovered from the jumpahead and the memory again contains the cached data items that are needed to provide quick data responses. The additional time required to read such data from disk slows system performance, and may in some circumstances cause client application time outs.